package com.jerry.seckill.service;

import java.util.List;

import com.jerry.seckill.dto.ExecutionResult;
import com.jerry.seckill.dto.Exposer;
import com.jerry.seckill.entity.Seckill;
import com.jerry.seckill.exception.RepeatSeckillException;
import com.jerry.seckill.exception.SeckillCloseException;
import com.jerry.seckill.exception.SeckillException;

/** 
  * @describe 业务接口：站在“使用者”角度设计接口 
  * 三个方面：方法定义粒度、参数、返回类型（return 类型/异常） 
  */ 
public interface SeckillService { 
	
	/**
	 * 查询所有秒杀记录 
	 * @return
	 */
	List<Seckill> getSeckillList(); 
	
	/** 
	  * 查询单个秒杀记录 
	  * @param seckillId 
	  * @return 
	  */ 
	Seckill getById(long seckillId); 
	
	/** 
	  * 秒杀开启时输出秒杀接口地址，否则输出系统时间和秒杀时间 
	  * @param seckillId 
	  */ 
	Exposer exportSeckillUrl(long seckillId); 
	
	/** 
	  * 执行秒杀操作 
	  * @param seckillId 
	  * @param userPhone 
	  * @param md5 
	  */ 
	ExecutionResult executeSeckill(long seckillId, String userPhone, String md5) 
			throws SeckillException,RepeatSeckillException,SeckillCloseException; 
	
	/** 
	  * 执行秒杀操作，存储过程 
	  * @param seckillId 
	  * @param userPhone 
	  * @param md5 
	  */ 
	ExecutionResult executeSeckillProcedure(long seckillId, String userPhone, String md5); 
	
}
